package com.example.service.impl;

import com.example.entity.PageBean;
import com.example.entity.Result;
import com.example.entity.dto.EmpDto;
import com.example.entity.dto.EmpLoginDto;
import com.example.entity.pojo.Emp;
import com.example.mapper.EmpMapper;
import com.example.service.EmpService;
import com.example.utils.MyJwtUtils;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpMapper empMapper;

    @Autowired
    private MyJwtUtils myJwtUtils;
    //使用分页插件
    @Override
    public PageBean<Emp> getByPage(Integer pageNum, Integer pageSize) {
        //开启分页插件查询
        PageHelper.startPage(pageNum, pageSize);
        //对原始方法进行代理，即对原始的方法增强
        //对原始方法返回的结果进行强转
        Page<Emp> emps = (Page<Emp>) empMapper.getByPage();
        //返回PageBean对象
        return new PageBean<>(emps.getTotal(), emps.getResult());
    }

    //重载带条件的分页查询
    @Override
    public PageBean<Emp> getByPage(Integer page, Integer pageSize, EmpDto empDto) {
        PageHelper.startPage(page, pageSize);
        Page<Emp> emps = (Page<Emp>) empMapper.getByPage2(empDto);
        return new PageBean<Emp>(emps.getTotal(), emps.getResult());
    }

    @Override
    public Result<String> login(EmpLoginDto empLoginDto) {
        //根据用户名和密码查询
        Emp emp = empMapper.getByNameAndPwd(empLoginDto);
        //成功，则生成 token，并返回
        //JwtUtils.generateToken(emp.getId(), emp.getUsername()
        Map<String, Object> map = new HashMap<>();
        map.put("id", emp.getId());
        map.put("name", emp.getName());

        return emp == null ? Result.error("NOT_LOGIN_ERROR") : Result.ok(myJwtUtils.createJwt( map));
        //失败，则返回null
        //成功登录，返回token，失败返回null，并给前端传递NOT_LOGIN_ERROR
    }

    @Override
    public int deleteByDeptId(Integer id) {
        return empMapper.deleteByDeptId(id);
    }

    //没使用分页插件
    /*@Override
    public PageBean<Emp> getByPage(Integer pageNum, Integer pageSize) {

        //pageNum:当前页码,pageSize:每页显示的记录数
        //计算开始索引,即limit跳过的记录数
        int start = (pageNum - 1) * pageSize;

        //调用mapper获取当前页的数据
        List<Emp> list = empMapper.getByPage(start, pageSize);

        //调用mapper获取数据库总记录数
        Long total = empMapper.getTotal();
        return new PageBean<>(total, list);
    }*/

}
